package com.cskaoyan.javase.oop1._6constructor;

/**
 * 细节:
 * 构造器的方法体中可以使用this关键字
 * 但是一般来说,这个this都是用来访问区分成员变量的,一般不要用来调用方法
 *
 * 构造器中的this关键字,有独特的用处,不同于成员方法中的this关键字
 *
 * 在构造器中,可以用this关键字去调用同类中其他构造器
 * 语法:
 *      this(实参列表);
 * 根据实参列表的不同,决定调用哪个构造器
 * 这是方法的重载
 * this(); 表示调用同类中的无参构造器
 * this(int); 表示调用同类中的int构造器
 *
 * 注意:
 *      this在构造器中表示调用其它构造器时
 *      必须在构造器代码的第一行!!!
 *
 *      一个构造器中使用this表示调用其他构造器
 *      最多只能用一次!
 *
 *
 * @since 10:04
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        Animal s = new Animal();
        Animal s2 = new Animal(18, "张三", 100, 1);
        System.out.println(s2.name);
    }
}

class Animal {
    int age;
    String name;
    double score;
    int id;

    public Animal(int age) {
        // test();
        this.age = age;
    }

    public Animal() {
    }

    public Animal(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Animal(int age, String name, double score) {
        this.age = age;
        this.name = name;
        this.score = score;
    }

    public Animal(int age, String name, double score, int id) {
        /*this.age = age;
        this.name = name;
        this.score = score;*/

        // Call to 'this()' must be first statement in constructor body
        this(age, name, score);
        this.id = id;
    }

    public void test() {
    }
}